home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1998 July / EnigmA AMIGA RUN 29 (1998)(G.R. Edizioni)(IT)[!][issue 1998-07 & 08].iso / earcd / phase5 / ppcrelease / tools / ppcshowtasks.c < prev    next >
C/C++ Source or Header  |  1998-02-21  |  7KB  |  282 lines

  1. #include <exec/types.h>
  2. #include <exec/libraries.h>
  3. #include <utility/tagitem.h>
  4. #include <utility/hooks.h>
  5. #include <proto/exec.h>
  6. #include <proto/dos.h>
  7. #include <stdlib.h>
  8. #include <PowerUP/pragmas/ppc_pragmas.h>
  9. #include <PowerUP/clib/ppc_protos.h>
  10. #include <PowerUP/PPCLib/tasks.h>
  11. #include "PPCShowTasks_VERSION.h"
  12. #include <stdio.h>
  13.  
  14. UBYTE vers[] = VERSTAG;
  15.  
  16. extern struct ExecBase    *SysBase;
  17.  
  18. void __builtin_emit(int);
  19.  
  20.  
  21. char    *ArgumentString = "Verbose/S,Register=Regs/S";
  22. LONG    *MyArgs[3];
  23.  
  24. #define    INDEX_VERBOSE    0
  25. #define    INDEX_REGS    1
  26.  
  27. char    *StateString[]=
  28. {
  29.     "Invalid",
  30.     "Added",
  31.     "Run",
  32.     "Ready",
  33.     "Wait",
  34.     "-------",
  35.     "Removed"
  36. };
  37.  
  38. ULONG    TaskCount;
  39.  
  40. void __asm HookFunc(register __a0 struct Hook    *MyHook,
  41.                     register __a2 void        *MyTask,
  42.                     register __a1 void        *MyMessage)
  43. {
  44. struct Library    *PPCLibBase;
  45. struct TagItem    MyTags[3];
  46. char        *Name;
  47. int        Pri;
  48. ULONG        State;
  49. ULONG        StackSize;
  50. ULONG        CacheFlush;
  51. ULONG        SigAlloc;
  52. ULONG        SigWait;
  53. ULONG        SigRecvd;
  54. BPTR        InputHandle;
  55. BPTR        OutputHandle;
  56. BPTR        ErrorHandle;
  57. int        i;
  58.  
  59.   PPCLibBase        =    (struct Library*) MyHook->h_Data;
  60.  
  61.   MyTags[1].ti_Tag    =    TAG_END;
  62.   MyTags[0].ti_Tag    =    PPCTASKINFOTAG_NAME;
  63.   Name            =    (char*) PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  64.  
  65.   MyTags[0].ti_Tag    =    PPCTASKINFOTAG_PRIORITY;
  66.   Pri            =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  67.  
  68.   MyTags[0].ti_Tag    =    PPCTASKINFOTAG_STATE;
  69.   State            =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  70.  
  71.   MyTags[0].ti_Tag    =    PPCTASKINFOTAG_STACKSIZE;
  72.   StackSize        =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  73.  
  74.   MyTags[0].ti_Tag    =    PPCTASKINFOTAG_CACHEFLUSH;
  75.   CacheFlush        =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  76.  
  77.   MyTags[0].ti_Tag    =    PPCTASKINFOTAG_SIGALLOC;
  78.   SigAlloc        =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  79.  
  80.   MyTags[0].ti_Tag    =    PPCTASKINFOTAG_SIGWAIT;
  81.   SigWait        =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  82.  
  83.   MyTags[0].ti_Tag    =    PPCTASKINFOTAG_SIGRECVD;
  84.   SigRecvd        =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  85.  
  86.   MyTags[0].ti_Tag    =    PPCTASKINFOTAG_INPUTHANDLE;
  87.   InputHandle        =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  88.  
  89.   MyTags[0].ti_Tag    =    PPCTASKINFOTAG_OUTPUTHANDLE;
  90.   OutputHandle        =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  91.  
  92.   MyTags[0].ti_Tag    =    PPCTASKINFOTAG_ERRORHANDLE;
  93.   ErrorHandle        =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  94.  
  95.   TaskCount++;
  96.  
  97.   puts("\n");
  98.   Printf("Task %ld: ID 0x%08lx %s Pri %ld State %s\n",
  99.          TaskCount,
  100.          MyTask,
  101.          Name,
  102.          Pri,
  103.          StateString[State]);
  104.  
  105.   if (MyArgs[INDEX_VERBOSE])
  106.   {
  107.     Printf("Task Internals:\n");
  108.     Printf("StackSize\t\t0x%08lx\n",StackSize);
  109.     Printf("SigAlloc\t\t0x%08lx\n",SigAlloc);
  110.     Printf("SigWait\t\t\t0x%08lx\n",SigWait);
  111.     Printf("SigRecvd\t\t0x%08lx\n",SigRecvd);
  112.     Printf("InputHandle\t\t0x%08lx\n",InputHandle);
  113.     Printf("OutputHandle\t\t0x%08lx\n",OutputHandle);
  114.     Printf("ErrorHandle\t\t0x%08lx\n",ErrorHandle);
  115.     Printf("CacheFlush\t\t%s\n",CacheFlush ? "AUTO" : "CUSTOM");
  116.   }
  117.  
  118.   if (MyArgs[INDEX_REGS])
  119.   {
  120.     ULONG    GPR[8];
  121.     double    FPR[8];
  122.     ULONG    PC;
  123.     ULONG    MSR;
  124.     ULONG    CR;
  125.     ULONG    XER;
  126.     ULONG    CTR;
  127.     ULONG    LR;
  128.     ULONG    FPSCR[2];
  129.  
  130.     puts("\n");
  131.  
  132.  
  133.     MyTags[0].ti_Tag    =    PPCTASKINFOTAG_PC;
  134.     MyTags[0].ti_Data    =    (ULONG) &PC;
  135.     MyTags[1].ti_Tag    =    TAG_END;
  136.     PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  137.  
  138.     MyTags[0].ti_Tag    =    PPCTASKINFOTAG_MSR;
  139.     MyTags[0].ti_Data    =    (ULONG) &MSR;
  140.     MyTags[1].ti_Tag    =    TAG_END;
  141.     PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  142.  
  143.     MyTags[0].ti_Tag    =    PPCTASKINFOTAG_CR;
  144.     MyTags[0].ti_Data    =    0;
  145.     MyTags[1].ti_Tag    =    TAG_END;
  146.     CR            =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  147.  
  148.     MyTags[0].ti_Tag    =    PPCTASKINFOTAG_XER;
  149.     MyTags[0].ti_Data    =    0;
  150.     MyTags[1].ti_Tag    =    TAG_END;
  151.     XER            =    PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  152.  
  153.     MyTags[0].ti_Tag    =    PPCTASKINFOTAG_CTR;
  154.     MyTags[0].ti_Data    =    (ULONG) &CTR;
  155.     MyTags[1].ti_Tag    =    TAG_END;
  156.     PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  157.  
  158.     MyTags[0].ti_Tag    =    PPCTASKINFOTAG_LR;
  159.     MyTags[0].ti_Data    =    (ULONG) &LR;
  160.     MyTags[1].ti_Tag    =    TAG_END;
  161.     PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  162.  
  163.     MyTags[0].ti_Tag    =    PPCTASKINFOTAG_FPSCR;
  164.     MyTags[0].ti_Data    =    (ULONG) &FPSCR;
  165.     MyTags[1].ti_Tag    =    TAG_END;
  166.     PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  167.  
  168.     Printf("PC %08lx MSR %08lx\n",
  169.             PC,
  170.             MSR);
  171.  
  172.     Printf("LR %08lx CTR %08lx CR %08lx XER %08lx FPSCR %08lx%08lx\n",
  173.             LR,
  174.             CTR,
  175.             CR,
  176.             XER,
  177.             FPSCR[0],
  178.             FPSCR[1]);
  179.  
  180.     for (i=0;i<32;i++)
  181.     {
  182.  
  183.       MyTags[0].ti_Tag    =    PPCTASKINFOTAG_GPR;
  184.       MyTags[0].ti_Data    =    i;
  185.       MyTags[1].ti_Tag    =    PPCTASKINFOTAG_VALUEPTR;
  186.       MyTags[1].ti_Data    =    (ULONG) &GPR[i%8];
  187.       MyTags[2].ti_Tag    =    TAG_END;
  188.  
  189.       PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  190.  
  191.       if (i > 0 && (i%8==7))
  192.       {
  193.         Printf("GPR %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\n",
  194.                 GPR[0],
  195.                 GPR[1],
  196.                 GPR[2],
  197.                 GPR[3],
  198.                 GPR[4],
  199.                 GPR[5],
  200.                 GPR[6],
  201.                 GPR[7]);
  202.       }
  203.     }
  204.  
  205.  
  206.     for (i=0;i<32;i++)
  207.     {
  208.       MyTags[0].ti_Tag    =    PPCTASKINFOTAG_FPR;
  209.       MyTags[0].ti_Data    =    i;
  210.       MyTags[1].ti_Tag    =    PPCTASKINFOTAG_VALUEPTR;
  211.       MyTags[1].ti_Data    =    (ULONG) &FPR[i%8];
  212.       MyTags[2].ti_Tag    =    TAG_END;
  213.  
  214.       PPCGetTaskAttrs(MyTask,(struct TagItem*) &MyTags);
  215.  
  216.       if (i > 0 && (i%8==7))
  217.       {
  218.         printf("FPR %g %g %g %g %g %g %g %g\n",
  219.                 FPR[0],
  220.                 FPR[1],
  221.                 FPR[2],
  222.                 FPR[3],
  223.                 FPR[4],
  224.                 FPR[5],
  225.                 FPR[6],
  226.                 FPR[7]);
  227.       }
  228.     }
  229.  
  230.   }
  231. }
  232.  
  233.  
  234.  
  235. void    main(ULONG    argc,
  236.              char    *argv[])
  237. {
  238. struct Library    *PPCLibBase;
  239. struct TagItem    MyTags[3];
  240. struct Hook    MyHook;
  241. struct RDArgs    *rdargs;
  242.  
  243.   if (PPCLibBase=OpenLibrary("ppc.library",0))
  244.   {
  245.  
  246.     if ((rdargs=ReadArgs(ArgumentString,(LONG*) &MyArgs[0],NULL)))
  247.     {
  248.       MyHook.h_Entry    =    (ULONG (*)(void)) HookFunc;
  249.       MyHook.h_SubEntry    =    (ULONG (*)(void)) NULL;
  250.       MyHook.h_Data    =    (APTR) PPCLibBase;
  251.  
  252.       MyTags[0].ti_Tag    =    PPCTASKINFOTAG_ALLTASK;
  253.       MyTags[0].ti_Data    =    TRUE;
  254.  
  255.       MyTags[1].ti_Tag    =    PPCTASKINFOTAG_HOOK;
  256.       MyTags[1].ti_Data    =    (ULONG) &MyHook;
  257.  
  258.       MyTags[2].ti_Tag    =    TAG_END;
  259.  
  260.       PPCGetTaskAttrs(NULL,
  261.                      (struct TagItem*) &MyTags);
  262.  
  263.       if (TaskCount==0)
  264.       {
  265.         puts("No PPC Task found\n");
  266.       }
  267.  
  268.       FreeArgs(rdargs);
  269.     }
  270.     else
  271.     {
  272.       puts("Commandline Error\n");
  273.       return;
  274.     }
  275.   }
  276.   else
  277.   {
  278.     puts("Can`t open ppc.library\n");
  279.     return;
  280.   }
  281. }
  282.